﻿using ExcellentProject.Dominio.Notificaciones.Entidades;
using ExcellentProject.Dominio.Notificaciones.Repositorios;
using ExcellentProject.Infraestructura.AccesoDatos.Notificaciones;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Transactions;

namespace RepositorioNotificacionUnitTestProject
{
    [TestClass]
    public class PruebaUnitariaRepositorioNotificacion
    {
        [TestMethod]
        public void CreacionRepositorio()
        {
            var repositorio = new RepositorioNotificacion();
        }
    [TestMethod]
        public void PruebaAgregarNotificacion()
        {
            var repositorio = new RepositorioNotificacion();
            repositorio.Contexto = new NotificacionesContext();
            var notificacion = new Notificacion()
            {
                Destinatario = "bbesmeralda_89@hotmail.com",
                Asunto = "EXAMENES UESTAR",
                Mensaje = "El estudiante Carlos Torres obtuvo una calificacion de 10/10",
                Estado = "ACTIVO"
            };
            repositorio.Agregar(notificacion);
        }
     [TestMethod]
        public void PruebaAgregarExamenaBase()
        {
            var repositorio = new RepositorioNotificacion();
            repositorio.Contexto = new NotificacionesContext();
            var notificacion = new Notificacion()
            {
                Destinatario = "bbesmeralda_89@hotmail.com",
                Asunto = "EXAMENES UESTAR",
                Mensaje = "El estudiante Carlos Torres obtuvo una calificacion de 10/10",
                Estado = "ACTIVO"
            };

            repositorio.Agregar(notificacion);
            repositorio.ConfirmarCambios();
        }
     public void PruebaBuscarNotificacion()
     {
         var repositorio = new RepositorioNotificacion();
         repositorio.Contexto = new NotificacionesContext();
         int numero = repositorio.Buscar(p => p.Estado == "ACTIVO").Count();
         Assert.AreEqual(numero, 1);
     }
     [TestMethod]
     public void PruebaModificarNotificacion()
     {
         var repositorio = new RepositorioNotificacion();
         repositorio.Contexto = new NotificacionesContext();
         var resultadoBusqueda = repositorio.Buscar(p => p.Estado == "ACTIVO").FirstOrDefault();
         if (resultadoBusqueda != null)
         {
             resultadoBusqueda.Estado = "CANCELADO";
             repositorio.Modificar(resultadoBusqueda);
             repositorio.ConfirmarCambios();
         }

     }
     [TestMethod]
     public void PruebaEliminarNotificacion()
     {
         var repositorio = new RepositorioNotificacion();
         repositorio.Contexto = new NotificacionesContext();
         var resultadoBusqueda = repositorio.Buscar(p => p.Estado == "CANCELADO").FirstOrDefault();
         if (resultadoBusqueda != null)
         {
             repositorio.Eliminar(resultadoBusqueda);
         }
         repositorio.ConfirmarCambios();

     }

     [TestMethod]
     public void PruebaFallaTransaccional()
     {
         var repositorio = new RepositorioNotificacion();
         repositorio.Contexto = new NotificacionesContext();
         using (var transaccion = new TransactionScope())
         {
             var notificacion = new Notificacion()
             {
                 Destinatario = "bbesmeralda_89@hotmail.com",
                 Asunto = "EXAMENES UESTAR",
                 Mensaje = "El estudiante Carlos Torres obtuvo una calificacion de 10/10",
                 Estado = "ACTIVO"
             };

             repositorio.Agregar(notificacion);
             repositorio.ConfirmarCambios();

             var notificacion2 = new Notificacion()
             {
                 Destinatario = "bbesmeralda_8@yahoo.com",
                 Asunto = "EXAMENES UESTAR",
                 Mensaje = "El estudiante Mariana Pérez obtuvo una calificacion de 05/10",
                 Estado = "CANCELADO"
             };

             throw new Exception("EXCEPCION INTENCIONAL");

             repositorio.Agregar(notificacion);
             repositorio.ConfirmarCambios();

             transaccion.Complete();
         }
     }
    }
}

